package com.bb.flow.config.node;

import com.bb.flow.config.AbstractConfigNode;
import com.bb.flow.config.enumtype.ExecuteType;
import com.bb.flow.config.enumtype.NodeType;

import java.util.ArrayList;
import java.util.List;

/**
 * @author bigbeard
 * 容器节点
 */
public class ContainerConfigNode extends AbstractConfigNode {

    /**
     * 执行方式
     */
    private ExecuteType executeType = ExecuteType.PARALLEL_EXECUTE;
    /**
     * 节点集合
     */
    private List<ContainerInnerNode> nodes = new ArrayList<>();

    /**
     * 获取执行方式
     *
     * @return 执行方式
     */
    public ExecuteType getExecuteType() {
        return executeType;
    }

    public void setExecuteType(ExecuteType executeType) {
        this.executeType = executeType;
    }

    /**
     * 获取容器中的节点
     *
     * @return 所有节点
     */
    public List<ContainerInnerNode> getNodes() {
        return nodes;
    }

    /**
     * 设置节点
     *
     * @param nodes 节点集合
     * @return 当前对象
     */
    public ContainerConfigNode setNodes(List<ContainerInnerNode> nodes) {
        this.nodes = nodes;
        return this;
    }

    /**
     * 移除一个节点
     *
     * @param configNode 需要移除的节点
     * @return 当前对象
     */
    public ContainerConfigNode removeNode(ContainerInnerNode configNode) {
        nodes.remove(configNode);
        return this;
    }

    /**
     * 添加一个节点
     *
     * @param configNode 节点
     * @return 当前对象
     */
    public ContainerConfigNode addNode(ContainerInnerNode configNode) {
        nodes.add(configNode);
        return this;
    }

    /**
     * 节点类型
     *
     * @return 获取接点类型
     */
    @Override
    public NodeType getNodeType() {
        return NodeType.CONTAINER_NODE;
    }
}
